#!/usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2016-2019, Intel Corporation

#
# src/test/rpmem_basic/TEST15 -- unit test for rpmem_deep_persist
# with device dax
#

. ../unittest/unittest.sh

require_test_type medium

require_fs_type any
require_build_type nondebug debug

require_nodes 2
require_node_dax_device 0 1
require_node_dax_device 1 1

. setup.sh

setup

LOG=out${UNITTEST_NUM}.log
LOG_TEMP=out${UNITTEST_NUM}_part.log

create_poolset $DIR/pool0.set AUTO:$(get_node_devdax_path 0 0)
create_poolset $DIR/pool1.set AUTO:$(get_node_devdax_path 0 0) O SINGLEHDR
create_poolset $DIR/pool2.set AUTO:$(get_node_devdax_path 0 0) O NOHDRS

expect_normal_exit run_on_node 0 rm -rf $PART_DIR
expect_normal_exit run_on_node 0 mkdir -p ${RPMEM_POOLSET_DIR[0]}
expect_normal_exit run_on_node 0 mkdir -p $PART_DIR
copy_files_to_node 0 ${RPMEM_POOLSET_DIR[0]} $DIR/{pool0.set,pool1.set,pool2.set}

expect_normal_exit run_on_node 0 ../pmempool rm -sf ${RPMEM_POOLSET_DIR[0]}/{pool0.set,pool1.set,pool2.set}
expect_normal_exit run_on_node 1 ../pmempool rm -sf $(get_node_devdax_path 0 0)

# pool0:

expect_normal_exit run_on_node 1 ./rpmem_basic$EXESUFFIX\
	test_create 0 pool0.set ${NODE_ADDR[0]} $(get_node_devdax_path 1 0) 0 none\
	test_deep_persist 0 0 1 1\
	test_close 0\
	test_open 0 pool0.set ${NODE_ADDR[0]} $(get_node_devdax_path 1 0) 0 init none\
	test_deep_persist 0 0 8 8\
	test_close 0\
	test_remove ${NODE_ADDR[0]} pool0.set 0 0
run_on_node 1 "cat $LOG >> $LOG_TEMP"

# pool1 (w/ SIGNLEHDR option):

expect_normal_exit run_on_node 1 ./rpmem_basic$EXESUFFIX\
	test_create 0 pool1.set ${NODE_ADDR[0]} $(get_node_devdax_path 1 0) 0 singlehdr\
	test_deep_persist 0 0 1 1\
	test_close 0\
	test_open 0 pool1.set ${NODE_ADDR[0]} $(get_node_devdax_path 1 0) 0 init singlehdr\
	test_deep_persist 0 0 8 8\
	test_close 0\
	test_remove ${NODE_ADDR[0]} pool1.set 0 0
run_on_node 1 "cat $LOG >> $LOG_TEMP"

# pool2 (w/ NOHDRS option):

expect_normal_exit run_on_node 1 ./rpmem_basic$EXESUFFIX\
	test_create 0 pool2.set ${NODE_ADDR[0]} $(get_node_devdax_path 1 0) 0 noattr\
	test_deep_persist 0 0 1 1\
	test_close 0\
	test_open 0 pool2.set ${NODE_ADDR[0]} $(get_node_devdax_path 1 0) 0 init noattr\
	test_deep_persist 0 0 8 8\
	test_close 0\
	test_remove ${NODE_ADDR[0]} pool2.set 0 0
run_on_node 1 "cat $LOG >> $LOG_TEMP"

run_on_node 1 mv $LOG_TEMP $LOG
check
pass
